﻿#pragma once

#include <log4lite/shared_ptr.h>
#include <log4lite/layout.h>

namespace log4lite {

	/// 数据输出
	class Appender 
	{
	public:
		Appender()
		{
			//
		}

		~Appender()
		{
			//
		}

	public:
		void destructorImlp()
		{
			std::cout << "Appender destructorImlp";
			close();
		}

		virtual void close() = 0;

		void doAppend(const LogItem& item)
		{
			append(item);
		}

		void setLayout(std::auto_ptr<Layout> layout)
		{
			_layout = layout;
		}

	protected:
		virtual void append(const LogItem& item) = 0;

	protected:
		/// 数据格式化
		std::auto_ptr<Layout> _layout;
	};

	typedef SHARED_PTR<Appender> AppenderPtr;

} // namespace log


